package com.project.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.project.bean.OrderBean;
import com.project.vo.Infos;

import java.util.List;

/**
 * 骑手订单接口
 *
 * @author lyl
 * @since 2021-10-04
 */
public interface OrderService extends IService<OrderBean> {
    /**
     * 自用方法，用于快速查找订单并获取其信息
     *
     * @param code
     * @return
     */
    OrderBean getOrderByCode(String code);

    /**
     * 根据骑手的接单设置查询订单集合
     *
     * @param state 骑手状态
     * @param area  骑手常驻区域
     * @return 订单集合（取货地址、送货地址、本单预计佣金，本单限制的时间）
     */
    List<OrderBean> findAllOrder(String state, String area);

    /**
     * 根据骑手信息与订单信息，修改此订单的状态为已接单（对应unchecked）、送货中（对应sending）、送货完毕（对应ending），并对redis进行更新
     * 已取货redis键为骑手的id+uncheck
     * 送货中redis键为骑手的id+sending
     * @param riderCode 骑手编号
     * @param orderCode 订单编号
     * @param statue    订单状态,作为参数传入的订单状态有三种，分别为：unchecked，sending、ending
     * @return 如果成功则返回(1, 成功)，如果失败则显示(0,失败)
     */
    Infos updateOrderState(String riderCode, String orderCode, String statue);

    /**
     * 根据骑手编号与订单状态，从Redis中查询该骑手的订单
     *
     * @param riderCode 骑手编号
     * @param statue    订单状态
     * @return 订单状态为已接单的订单集合(取货地点, 送货地点, 下单时间, 店家联系电话, 骑手提成预览)
     * 订单状态为已取货的订单集合(用户所在地址、订单备注、用户联系信息)
     */
    List<OrderBean> findAllOrderByStatue(String riderCode, String statue);


    /**
     * 根据骑手编号，当前日期，订单状态(已送达)对当日订单进行查询
     *
     * @param riderCode 骑手编号
     * @param date      当前日期
     * @return 订单集合：订单编号、送达时间、起始地址、骑手此单佣金、实际送达时间
     */
    List<OrderBean> findAllOrderByRiderCodeAndDateAndStatue(String riderCode, String date);

    /**
     * 根据骑手编号查询对应骑手的历史订单
     *
     * @param riderCode 骑手编号
     * @return 骑手用户的所有完成的配送订单（结束时间、每单收入、订餐用户名）
     */
    List<OrderBean> findOrderByRiderCodeAndStatus(String riderCode);
}
